package com.example.demo34permission.controller;

import org.springframework.security.access.prepost.PostFilter;
import org.springframework.security.access.prepost.PreFilter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * Spring Security 中还有两个过滤函数 @PreFilter 和 @PostFilter，可以根据给出的条件，自动移除集合中的元素。
 */
@RestController
public class Hello3Controller {

    // 在 getAllUser 方法中，对集合进行过滤，只返回后缀为 2 的元素，filterObject 表示要过滤的元素对象。
    @PostFilter("(filterObject.charAt(9) + '').equals('2')")
    @GetMapping("/getAllUser")
    public List<String> getAllUser() {
        List<String> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            users.add("wangnian:" + i);
        }
        return users;
    }

    // 在 getAllAge 方法中，由于有两个集合，因此使用 filterTarget 指定过滤对象。
    @PreFilter(filterTarget = "ages", value = "filterObject%2==0")
    @GetMapping("/getAllAge/{ages}")
    public List<Integer> getAllAge(@PathVariable List<Integer> ages) {
        return ages;
    }

}
